home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
176-200
/
scopedisk185
/
calc
/
calcmenus.mod
< prev
next >
Wrap
Text File
|
1995-03-19
|
5KB
|
188 lines
IMPLEMENTATION MODULE CalcMenus;
FROM SYSTEM IMPORT ADR, BYTE, TERMPROC;
FROM Intuition IMPORT IntuiMessage, ITEMNUM, ItemFlags, ItemFlagSet,
CheckWidth, SetMenuStrip, MenuItemPtr, ItemAddress,
IntuiText, AutoRequest, IDCMPFlagSet, MenuNULL;
FROM Rasters IMPORT Jam1;
FROM EasyMenus IMPORT StartStrip, DisposeStrip, currentStrip,
stripFailed, AddMenu, AddItem, nextItemFlags,
currentItem, nextIntuiLeftEdge, currentIntui,
nextItemTopEdge, nextTextAttr;
FROM CalcDisplay IMPORT DoLCD, window, textAttr;
FROM CalcGadgets IMPORT GhostUnused;
FROM CalcBrains IMPORT value, stoValue;
CONST
About1 = "Calc V1.01, 25-Mar-89";
About2 = "Copyright © 1989 Martin Taillefer";
About3 = "All Rights Reserved";
About4 = "Freely redistributable";
PROCEDURE WhoDoneIt();
VAR
intui : ARRAY [0..4] OF IntuiText;
i : CARDINAL;
bool : BOOLEAN;
BEGIN
FOR i:=0 TO 4 DO
WITH intui[i] DO
FrontPen := BYTE(0);
DrawMode := Jam1;
LeftEdge := 16;
TopEdge := 5+10*i;
ITextFont := ADR(textAttr);
NextText := ADR(intui[i+1]);
END;
END;
intui[3].NextText:=NIL;
intui[4].NextText:=NIL;
intui[0].IText:=ADR(About1);
intui[1].IText:=ADR(About2);
intui[2].IText:=ADR(About3);
intui[3].IText:=ADR(About4);
INC(intui[3].TopEdge,10);
intui[4].IText:=ADR(" OK ");
intui[4].LeftEdge:=6;
intui[4].TopEdge:=3;
bool:=AutoRequest(NIL,ADR(intui[0]),NIL,ADR(intui[4]),
IDCMPFlagSet{},IDCMPFlagSet{},320,72);
END WhoDoneIt;
PROCEDURE TerminateCalcMenus;
BEGIN
DisposeStrip(currentStrip);
END TerminateCalcMenus;
PROCEDURE InitMenuStuff(): BOOLEAN;
(*$S-*)
PROCEDURE AddItemX(name:ARRAY OF CHAR; cmdkey:CHAR; xclude:LONGBITSET);
BEGIN
AddItem(name,cmdkey);
currentItem^.MutualExclude:=xclude;
END AddItemX;
PROCEDURE AddSeperator();
BEGIN
AddItem("---------------",0C);
EXCL(currentItem^.Flags,ItemEnabled);
DEC(currentIntui^.LeftEdge,CheckWidth);
DEC(currentItem^.Height,2);
DEC(currentItem^.TopEdge);
DEC(nextItemTopEdge,2);
END AddSeperator;
VAR
item : MenuItemPtr;
BEGIN
StartStrip;
INCL(nextItemFlags,CheckIt);
INC(nextIntuiLeftEdge,CheckWidth);
nextTextAttr:=ADR(textAttr);
AddMenu(" Data ",123);
AddItemX("8 bits","8",LONGBITSET{1,2});
AddItemX("16 bits","1",LONGBITSET{0,2});
AddItemX("32 bits","3",LONGBITSET{0,1});
AddSeperator();
AddItemX("Signed","S",LONGBITSET{5});
AddItemX("Unsigned","U",LONGBITSET{4});
AddSeperator;
AddItem("About...","?");
DEC(currentIntui^.LeftEdge,CheckWidth);
IF NOT stripFailed THEN
item:=ItemAddress(currentStrip,(ORD(WordSize8)+ORD(wordSize))*32);
INCL(item^.Flags,Checked);
item:=ItemAddress(currentStrip,(ORD(Signed)+ORD(NOT signed))*32);
INCL(item^.Flags,Checked);
SetMenuStrip(window,currentStrip);
END;
TERMPROC(TerminateCalcMenus);
RETURN NOT stripFailed;
END InitMenuStuff;
PROCEDURE HandleMenuPick(VAR intui:IntuiMessage; menuCode:CARDINAL): INTEGER;
VAR
dummy : INTEGER;
itemPtr : MenuItemPtr;
BEGIN
WHILE menuCode # MenuNULL DO
dummy:=FakeMenuPick(VAL(MenuType,ITEMNUM(menuCode)));
IF dummy # 0 THEN
RETURN dummy;
END;
itemPtr:=ItemAddress(currentStrip,menuCode);
menuCode:=itemPtr^.NextSelect;
END;
RETURN 0;
END HandleMenuPick;
PROCEDURE FakeMenuPick(menuCode:MenuType): INTEGER;
VAR
bits : LONGBITSET;
BEGIN
CASE menuCode OF
|WordSize8 : wordSize:=WORD8;
bits:=LONGBITSET{};
IF signed & (LONGINT(value)<0) THEN
bits:=LONGBITSET{8..31};
END;
value:=LONGCARD(LONGBITSET(value) * LONGBITSET(255));
value:=LONGCARD(LONGBITSET(value) + bits);
bits:=LONGBITSET{};
IF signed & (LONGINT(stoValue)<0) THEN
bits:=LONGBITSET{8..31};
END;
stoValue:=LONGCARD(LONGBITSET(stoValue) * LONGBITSET(255));
stoValue:=LONGCARD(LONGBITSET(stoValue) + bits);
|WordSize16: wordSize:=WORD16;
bits:=LONGBITSET{};
IF signed & (LONGINT(value)<0) THEN
bits:=LONGBITSET{16..31};
END;
value:=LONGCARD(LONGBITSET(value) * LONGBITSET(65535));
value:=LONGCARD(LONGBITSET(value) + bits);
bits:=LONGBITSET{};
IF signed & (LONGINT(stoValue)<0) THEN
bits:=LONGBITSET{16..31};
END;
stoValue:=LONGCARD(LONGBITSET(stoValue) * LONGBITSET(65535));
stoValue:=LONGCARD(LONGBITSET(stoValue) + bits);
|WordSize32: wordSize:=WORD32;
|Signed : signed:=TRUE;
|Unsigned : signed:=FALSE;
|About : WhoDoneIt();
ELSE
END;
GhostUnused;
DoLCD;
RETURN 0;
END FakeMenuPick;
BEGIN
wordSize:=WORD32;
signed:=FALSE;
END CalcMenus.